package com.alameda.service.media;

import com.alameda.common.commonpent.mp.BaseService;
import com.alameda.media.dto.AdMediaDTO;
import com.alameda.media.vo.AdMediaVO;
import com.alameda.pojo.media.AdMediaDO;
import com.alameda.tag.dto.AdTagDTO;
import com.alameda.type.dto.AdMediaTypeDTO;
import com.alameda.video.dto.ApVideoDTO;
import com.alameda.video.vo.ApVideoVO;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

/**
 * 媒体文件 业务逻辑层
 *
 * @author Lv
 * @date 2024/07/20
 */
public interface AdMediaService extends BaseService<AdMediaDO> {

    /**
     * 保存媒体文件
     *
     * @param adMediaDTO 媒体文件信息
     * @return
     */
    AdMediaVO saveMedia(AdMediaDTO adMediaDTO);

    /**
     * 批量上传文件
     *
     * @param adMediaDTOList 媒体文件信息
     * @return
     */
    Boolean uploadFileBatch(List<AdMediaDTO> adMediaDTOList);

    /**
     * 查询视频列表
     *
     * @param apVideoDTO 移动端视频信息
     * @return
     */
    List<ApVideoVO> loadVideo(ApVideoDTO apVideoDTO);

    /**
     * 查询视频
     *
     * @param apVideoDTO 移动端视频信息
     * @return
     */
    ApVideoVO findById(ApVideoDTO apVideoDTO);

    /**
     * 读取视频文件信息
     *
     * @param idList 视频文件id集合
     * @return
     */
    List<AdMediaVO> findByVideoIdIn(List<Long> idList);

    /**
     * 处理文件名称
     *
     * @param fileName 文件名称
     * @return
     */
    String dealFileName(String fileName);

    /**
     * 分页查询媒体文件
     *
     * @param adMediaDTO 媒体文件信息
     * @return
     */
    IPage<AdMediaVO> loadMedia(AdMediaDTO adMediaDTO);

    /**
     * 上传媒体文件封面
     *
     * @param adMediaDTO 媒体文件信息
     * @return
     */
    String uploadMediaCover(AdMediaDTO adMediaDTO);

    /**
     * 修改媒体文件信息
     *
     * @param adMediaDTO 媒体文件信息
     * @return
     */
    Boolean updateMedia(AdMediaDTO adMediaDTO);

    /**
     * 导出媒体excel
     *
     * @param adMediaDTO 媒体文件信息
     */
    void exportExcel(AdMediaDTO adMediaDTO);

    /**
     * 删除媒体文件
     *
     * @param adMediaDTO 媒体文件信息
     * @return
     */
    Boolean removeMedia(AdMediaDTO adMediaDTO);

    /**
     * 获取媒体信息详情
     *
     * @param adMediaDTO 媒体文件信息
     * @return
     */
    AdMediaVO findMediaDetail(AdMediaDTO adMediaDTO);

    /**
     * 查询视频播放页面列表视频
     *
     * @param apVideoDTO 移动端视频信息
     * @return
     */
    List<ApVideoVO> findVideoDetailInfo(ApVideoDTO apVideoDTO);

    /**
     * 通过标签查询视频列表
     *
     * @param adTagDTO 媒体文件标签信息
     * @return
     */
    List<ApVideoVO> loadMediaByTag(AdTagDTO adTagDTO);

    /**
     * 通过类型查询视频列表
     *
     * @param adMediaTypeDTO 媒体文件分类信息
     * @return
     */
    List<ApVideoVO> loadMediaByType(AdMediaTypeDTO adMediaTypeDTO);

    /**
     * 物理层面移除已逻辑删除文件
     *
     * @return
     */
    Boolean removeLogicDeletedFile();

    /**
     * 物理层面删除已被替换文件封面
     *
     * @return
     */
    Boolean removeReplacedCover();
}
